//	written	by Tan Ling	Wee	on 2 Dec 2001
//	last updated 23 June 2002
//	email :	fuushikaden@yahoo.com

	var	fixedX = -1			// x position (-1 if to appear below control)
	var	fixedY = -1			// y position (-1 if to appear below control)
	var startAt = 1			// 0 - sunday ; 1 - monday
	var showWeekNumber = 1	// 0 - don't show; 1 - show
	var showToday = 1		// 0 - don't show; 1 - show
	var imgDir = "/js/includes/"			// directory for images ... e.g. var imgDir="/img/"

	var gotoString = "Go To Current Month"
	var todayString = "Today is"
	var weekString = "Wk"
	var scrollLeftMessage = "Click to scroll to previous month. Hold mouse button to scroll automatically."
	var scrollRightMessage = "Click to scroll to next month. Hold mouse button to scroll automatically."
	var selectMonthMessage = "Click to select a month."
	var selectYearMessage = "Click to select a year."
	var selectDateMessage = "Select [date] as date." // do not replace [date], it will be replaced by date.

	var	crossobj, crossMonthObj, crossYearObj, monthSelected, yearSelected, dateSelected, omonthSelected, oyearSelected, odateSelected, monthConstructed, yearConstructed, intervalID1, intervalID2, timeoutID1, timeoutID2, ctlToPlaceValue,ctlToPlaceValue3, ctlNow, dateFormat, nStartingYear

	var	bPageLoaded=false
	var	ie=document.all
	var	dom=document.getElementById

	var	ns4=document.layers
	var	today =	new	Date()
	var	dateNow	 = today.getDate()
	var	monthNow = today.getMonth()
	var	yearNow	 = today.getYear()
	var	imgsrc = new Array("drop1.png","drop2.png","left1.png","left2.png","right1.png","right2.png")
	var	img	= new Array()

	var bShow = false;
	var processDateOnClose = 0;

    /* hides <select> and <applet> objects (for IE only) */
    function hideElement( elmID, overDiv )
    {
      if( ie )
      {
        for( i = 0; i < document.all.tags( elmID ).length; i++ )
        {
          obj = document.all.tags( elmID )[i];
          if( !obj || !obj.offsetParent )
          {
            continue;
          }
      
          // Find the element's offsetTop and offsetLeft relative to the BODY tag.
          objLeft   = obj.offsetLeft;
          objTop    = obj.offsetTop;
          objParent = obj.offsetParent;
          
          while( objParent.tagName.toUpperCase() != "BODY" )
          {
            objLeft  += objParent.offsetLeft;
            objTop   += objParent.offsetTop;
            objParent = objParent.offsetParent;
          }
      
          objHeight = obj.offsetHeight;
          objWidth = obj.offsetWidth;
      
          if(( overDiv.offsetLeft + overDiv.offsetWidth ) <= objLeft );
          else if(( overDiv.offsetTop + overDiv.offsetHeight ) <= objTop );
          else if( overDiv.offsetTop >= ( objTop + objHeight ));
          else if( overDiv.offsetLeft >= ( objLeft + objWidth ));
          else
          {
            obj.style.visibility = "hidden";
          }
        }
      }
    }
     
    /*
    * unhides <select> and <applet> objects (for IE only)
    */
    function showElement( elmID )
    {
      if( ie )
      {
        for( i = 0; i < document.all.tags( elmID ).length; i++ )
        {
          obj = document.all.tags( elmID )[i];
          
          if( !obj || !obj.offsetParent )
          {
            continue;
          }
        
          obj.style.visibility = "";
        }
      }
    }

	function HolidayRec (d, m, y, desc)
	{
		this.d = d
		this.m = m
		this.y = y
		this.desc = desc
	}

	var HolidaysCounter = 0
	var Holidays = new Array()

	function addHoliday (d, m, y, desc)
	{
		Holidays[HolidaysCounter++] = new HolidayRec ( d, m, y, desc )
	}

	if (dom)
	{
		for	(i=0;i<imgsrc.length;i++)
		{
			img[i] = new Image
			img[i].src = imgDir + imgsrc[i]
		}
		document.write ("<div onclick='bShow=true' id='calendar'	style='z-index:+999;position:absolute;visibility:hidden;'><table width="+((showWeekNumber==1)?250:220)+" class='view_table' ><tr><td><table width='"+((showWeekNumber==1)?248:218)+"'><tr style='font-family:arial; font-size:11px '><td><span id='caption'></span></td><td align=right><a href='javascript:hideCalendar()'><IMG SRC='"+imgDir+"close.png' WIDTH='12' HEIGHT='12' BORDER='0' ALT='Close the Calendar'></a></td></tr></table></td></tr><tr class='view_tr1' ><td ><span id='date_content'style='font-size:11px'></span></td></tr>")
			
		if (showToday==1)
		{
			document.write ("<tr ><td align=center><span id='lblToday'></span></td></tr>")
		}
			
		document.write ("</table></div><div id='selectMonth' style='z-index:+999;position:absolute;visibility:hidden;'></div><div id='selectYear' style='z-index:+999;position:absolute;visibility:hidden;'></div>");
	}

	var	monthName =	new	Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
	var	monthNameFull =	new	Array("January","February","March","April","May","June","July","August","September","October","November","December")
	
	if (startAt==0)
	{
		dayName = new Array	("Sun","Mon","Tue","Wed","Thu","Fri","Sat")
		dayNameFull = new Array	("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")		
	}
	else
	{
		dayName = new Array	("Mon","Tue","Wed","Thu","Fri","Sat","Sun")
		dayNameFull = new Array	("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")		
	}
	var	styleAnchor="text-decoration:none;color:black;"
	var	styleLightBorder="border-style:solid;border-width:1px;border-color:#a0a0a0;"

	function swapImage(srcImg, destImg){
		if (ie)	{ document.getElementById(srcImg).setAttribute("src",imgDir + destImg) }
	}

	function init()	{
		if (!ns4)
		{
			if (!ie) { yearNow += 1900	}

			crossobj=(dom)?document.getElementById("calendar").style : ie? document.all.calendar : document.calendar
			hideCalendar()

			crossMonthObj=(dom)?document.getElementById("selectMonth").style : ie? document.all.selectMonth	: document.selectMonth

			crossYearObj=(dom)?document.getElementById("selectYear").style : ie? document.all.selectYear : document.selectYear

			monthConstructed=false;
			yearConstructed=false;

			if (showToday==1)
			{
				document.getElementById("lblToday").innerHTML =	todayString + " <a onmousemove='window.status=\""+gotoString+"\"' onmouseout='window.status=\"\"' title='"+gotoString+"' style='"+styleAnchor+"' href='javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();'>"+dayName[(today.getDay()-startAt==-1)?6:(today.getDay()-startAt)]+", " + dateNow + " " + monthName[monthNow].substring(0,3)	+ "	" +	yearNow	+ "</a>"
			}

			sHTML1="<span id='spanLeft'	style='cursor:pointer' onmouseover='swapImage(\"changeLeft\",\"left2.png\");window.status=\""+scrollLeftMessage+"\"' onclick='javascript:decMonth()' onmouseout='clearInterval(intervalID1);swapImage(\"changeLeft\",\"left1.png\");window.status=\"\"' onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartDecMonth()\",500)'	onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'>&nbsp<IMG id='changeLeft' SRC='"+imgDir+"left1.png' width=12 height=10 BORDER=0>&nbsp</span>&nbsp;"
			sHTML1+="<span id='spanRight' style='cursor:pointer'	onmouseover='swapImage(\"changeRight\",\"right2.png\");window.status=\""+scrollRightMessage+"\"' onmouseout='clearInterval(intervalID1);swapImage(\"changeRight\",\"right1.png\");window.status=\"\"' onclick='incMonth()' onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartIncMonth()\",500)'	onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'>&nbsp<IMG id='changeRight' SRC='"+imgDir+"right1.png'	width=12 height=10 BORDER=0>&nbsp</span>&nbsp"
			sHTML1+="<span id='spanMonth' style='cursor:pointer'	onmouseover='swapImage(\"changeMonth\",\"drop2.png\");window.status=\""+selectMonthMessage+"\"' onmouseout='swapImage(\"changeMonth\",\"drop1.png\");window.status=\"\"' onclick='popUpMonth()'></span>&nbsp;"
			sHTML1+="<span id='spanYear' style='cursor:pointer' onmouseover='swapImage(\"changeYear\",\"drop2.png\");window.status=\""+selectYearMessage+"\"'	onmouseout='swapImage(\"changeYear\",\"drop1.png\");window.status=\"\"'	onclick='popUpYear()'></span>&nbsp;"
			
			document.getElementById("caption").innerHTML  =	sHTML1

			bPageLoaded=true
		}
	}

	function hideCalendar()	{
		crossobj.visibility="hidden"
		if (crossMonthObj != null){crossMonthObj.visibility="hidden"}
		if (crossYearObj !=	null){crossYearObj.visibility="hidden"}

	    showElement( 'SELECT' );
		showElement( 'APPLET' );
	}

	function padZero(num) {
		return (num	< 10)? '0' + num : num ;
	}

	function set12HourFormat(num) {
	 return (num > 12)? num-12 : num;
	}
	
	function setAMPM(num) {
   return (num > 12) ? "PM" : "AM";
	}
	
	function setDaySuffix(num) {
   if(num == 1 || num == 21 || num == 31) return "st";
	 else if(num == 2 || num == 22) return "nd";
	 else if(num == 3 || num == 23) return "rd";
	 else return "th";
	}
	
	function constructDate(d,m,y)
	{
		var	dt = new Date();
		sTmp = dateFormat

		var year1
		var year2
		var month1
		var month2
		var month3
		var month4
		var day1
		var day2
		var day3
		var day4
		var day5
		var hour1
		var hour2
		var hour3
		var hour4
		var minute
		var second
		var ampm
		var daysuffix
		
		
		if(sTmp.indexOf("Y")>-1)	year1 = y //Y - year, 4 digits; e.g. "1999"
		sTmp = sTmp.replace (/Y/g,"@+@")		
		if(sTmp.indexOf("y")>-1)	year2 = (y+"").substring(2,4) //y - year, 2 digits; e.g. "99" 
		sTmp = sTmp.replace (/y/g,"@++@")  
		
    if(sTmp.indexOf("m")>-1) month1 = padZero(m+1) //m - month; i.e. "01" to "12"	
		sTmp = sTmp.replace	(/m/g,"&+&")
    if(sTmp.indexOf("n")>-1) month2 = (m+1) //n - month without leading zeros; i.e. "1" to "12" 
		sTmp = sTmp.replace	(/n/g,"&^+&^") 
    if(sTmp.indexOf("M")>-1) month3 = monthName[m+1] //M - month, textual, 3 letters; e.g. "Jan" 
    sTmp = sTmp.replace	(/M/g,"~+~")
		if(sTmp.indexOf("F")>-1) month4 = monthNameFull[m+1] //F - month, textual, long; e.g. "January"  
		sTmp = sTmp.replace	(/F/g,"~^+~^") 

		
		if(sTmp.indexOf("d")>-1) day1 = padZero(d) //d - day of the month, 2 digits with leading zeros; i.e. "01" to "31"
		sTmp = sTmp.replace (/d/g,"#+#")				
		if(sTmp.indexOf("j")>-1) day2 = d //j - day of the month without leading zeros; i.e. "1" to "31"
		sTmp = sTmp.replace	(/j/g,"#^+#^")  
		if(sTmp.indexOf("D")>-1) day3 = dayName[dt.getDay()] //D - day of the week, textual, 3 letters; e.g. "Fri"
		sTmp = sTmp.replace	(/D/g,"^+^")
		if(sTmp.indexOf("l")>-1)	day4 = dayNameFull[dt.getDay()] //l (lowercase 'L') - day of the week, textual, long; e.g. "Friday"	   
		sTmp = sTmp.replace	(/l/g,"!^+!^")
    if(sTmp.indexOf("w")>-1)	day5 = dt.getDay() //w - day of the week, numeric, i.e. "0" (Sunday) to "6" (Saturday)	 
    sTmp = sTmp.replace	(/w/g,"!+!") 
		
		
		if(sTmp.indexOf("H")>-1) hour1 = padZero(dt.getHours()) //H - hour, 24-hour format; i.e. "00" to "23" 		
		sTmp = sTmp.replace	(/H/g,"%+%")  
		if(sTmp.indexOf("G")>-1) hour2 = dt.getHours() //G - hour, 24-hour format without leading zeros; i.e. "0" to "23" 
		sTmp = sTmp.replace	(/G/g,"%^+%^")     		
		if(sTmp.indexOf("h")>-1) hour3 = padZero(set12HourFormat(dt.getHours())) //h - hour, 12-hour format; i.e. "01" to "12"
		sTmp = sTmp.replace	(/h/g,"?+?")
		if(sTmp.indexOf("g")>-1) hour4 = set12HourFormat(dt.getHours()) //g - hour, 12-hour format without leading zeros; i.e. "1" to "12"   
		sTmp = sTmp.replace	(/g/g,"?^+?^")   

		
		if(sTmp.indexOf("i")>-1) minute = padZero(dt.getMinutes())  		
		sTmp = sTmp.replace	(/i/g,"*+*")

		
		if(sTmp.indexOf("s")>-1)	second = padZero(dt.getSeconds())		
		sTmp = sTmp.replace	(/s/g,"*++*")

		
		if(sTmp.indexOf("A")>-1) ampm = setAMPM(dt.getHours()) //a - "am" or "pm"
		sTmp = sTmp.replace	(/A/g,"*^+*^")		 
		if(sTmp.indexOf("a")>-1) ampm = setAMPM(dt.getHours()).toLowerCase() //A - "AM" or "PM" 
		sTmp = sTmp.replace	(/a/g,"?++?")		
				

		if(sTmp.indexOf("S")>-1) daysuffix = setDaySuffix(d) //S - English ordinal suffix for the day of the month, 2 characters; i.e. "st", "nd", "rd" or "th" 
		sTmp = sTmp.replace	(/S/g,"!++!")
				
		
		sTmp = sTmp.replace	(/\@\+\@/g, year1)
		sTmp = sTmp.replace	(/\@\+\+\@/g, year2)
		sTmp = sTmp.replace	(/\#\+\#/g, day1)
    sTmp = sTmp.replace	(/\#\^\+\#\^/g, day2)
    sTmp = sTmp.replace	(/\^\+\^/g, day3)
    sTmp = sTmp.replace	(/\!\^\+\!\^/g, day4)
    sTmp = sTmp.replace	(/\!\+\!/g, day5)
    sTmp = sTmp.replace	(/\&\+\&/g, month1)
    sTmp = sTmp.replace	(/\&\^\+\&\^/g, month2)
    sTmp = sTmp.replace	(/\~\+\~/g, month3) 
    sTmp = sTmp.replace	(/\~\^\+\~\^/g, month4)
    sTmp = sTmp.replace	(/\%\+\%/g, hour1)
    sTmp = sTmp.replace	(/\%\^\+\%\^/g, hour2)
    sTmp = sTmp.replace	(/\?\+\?/g, hour3)
    sTmp = sTmp.replace	(/\?\^\+\?\^/g, hour4)
    sTmp = sTmp.replace	(/\*\+\*/g, minute)
		sTmp = sTmp.replace	(/\*\+\+\*/g, second)
		sTmp = sTmp.replace	(/\*\^\+\*\^/g, ampm)
		sTmp = sTmp.replace	(/\?\+\+\?/g, ampm)				
		sTmp = sTmp.replace	(/\!\+\+\!/g, daysuffix)			
				
   return sTmp		
	}

	
	function constructDate3(d,m,y)
	{
		var	dt = new Date();
		return y+'-'+padZero(m+1)+'-'+padZero(d)+' '+padZero(dt.getHours())+':'+padZero(dt.getMinutes())+':'+padZero(dt.getSeconds())
	}

	function closeCalendar() 
	{
		var	sTmp

		hideCalendar();
		ctlToPlaceValue.value =	constructDate(dateSelected,monthSelected,yearSelected);
		ctlToPlaceValue.focus();
		ctlToPlaceValue3.value =constructDate3(dateSelected,monthSelected,yearSelected);
		if(processDateOnClose>0) 
		{//if
		  ProcessDateOnClose();
		  processDateOnClose = 1;
        	}//if
	}

	/*** Month Pulldown	***/

	function StartDecMonth()
	{
		intervalID1=setInterval("decMonth()",80)
	}

	function StartIncMonth()
	{
		intervalID1=setInterval("incMonth()",80)
	}

	function incMonth () {
		monthSelected++
		if (monthSelected>11) {
			monthSelected=0
			yearSelected++
		}
		constructCalendar()
	}

	function decMonth () {
		monthSelected--
		if (monthSelected<0) {
			monthSelected=11
			yearSelected--
		}
		constructCalendar()
	}

	function constructMonth() {
		popDownYear()
		if (!monthConstructed) {
			sHTML =	""
			for	(i=0; i<12;	i++) {
				sName =	monthName[i];
				if (i==monthSelected){
					sName =	"<B>" +	sName +	"</B>"
				}
				sHTML += "<tr><td id='m" + i + "' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='this.style.backgroundColor=\"\"' style='cursor:pointer' onclick='monthConstructed=false;monthSelected=" + i + ";constructCalendar();popDownMonth();event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>"
			}

			document.getElementById("selectMonth").innerHTML = "<table width=70	style='font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0;' bgcolor='#FFFFDD' cellspacing=0 onmouseover='clearTimeout(timeoutID1)'	onmouseout='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"popDownMonth()\",100);event.cancelBubble=true'>" +	sHTML +	"</table>"

			monthConstructed=true
		}
	}

	function popUpMonth() {
		constructMonth()
		crossMonthObj.visibility = (dom||ie)? "visible"	: "show"
		crossMonthObj.left = parseInt(crossobj.left) + 50
		crossMonthObj.top =	parseInt(crossobj.top) + 26

		hideElement( 'SELECT', document.getElementById("selectMonth") );
		hideElement( 'APPLET', document.getElementById("selectMonth") );			
	}

	function popDownMonth()	{
		crossMonthObj.visibility= "hidden"
	}

	/*** Year Pulldown ***/

	function incYear() {
		for	(i=0; i<7; i++){
			newYear	= (i+nStartingYear)+1
			if (newYear==yearSelected)
			{ txtYear =	"&nbsp;<B>"	+ newYear +	"</B>&nbsp;" }
			else
			{ txtYear =	"&nbsp;" + newYear + "&nbsp;" }
			document.getElementById("y"+i).innerHTML = txtYear
		}
		nStartingYear ++;
		bShow=true
	}

	function decYear() {
		for	(i=0; i<7; i++){
			newYear	= (i+nStartingYear)-1
			if (newYear==yearSelected)
			{ txtYear =	"&nbsp;<B>"	+ newYear +	"</B>&nbsp;" }
			else
			{ txtYear =	"&nbsp;" + newYear + "&nbsp;" }
			document.getElementById("y"+i).innerHTML = txtYear
		}
		nStartingYear --;
		bShow=true
	}

	function selectYear(nYear) {
		yearSelected=parseInt(nYear+nStartingYear);
		yearConstructed=false;
		constructCalendar();
		popDownYear();
	}

	function constructYear() {
		popDownMonth()
		sHTML =	""
		if (!yearConstructed) {

			sHTML =	"<tr><td align='center'	onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='clearInterval(intervalID1);this.style.backgroundColor=\"\"' style='cursor:pointer'	onmousedown='clearInterval(intervalID1);intervalID1=setInterval(\"decYear()\",30)' onmouseup='clearInterval(intervalID1)'>-</td></tr>"

			j =	0
			nStartingYear =	yearSelected-3
			for	(i=(yearSelected-3); i<=(yearSelected+3); i++) {
				sName =	i;
				if (i==yearSelected){
					sName =	"<B>" +	sName +	"</B>"
				}

				sHTML += "<tr><td id='y" + j + "' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='this.style.backgroundColor=\"\"' style='cursor:pointer' onclick='selectYear("+j+");event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>"
				j ++;
			}

			sHTML += "<tr><td align='center' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='clearInterval(intervalID2);this.style.backgroundColor=\"\"' style='cursor:pointer' onmousedown='clearInterval(intervalID2);intervalID2=setInterval(\"incYear()\",30)'	onmouseup='clearInterval(intervalID2)'>+</td></tr>"

			document.getElementById("selectYear").innerHTML	= "<table width=44 style='font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0;'	bgcolor='#FFFFDD' onmouseover='clearTimeout(timeoutID2)' onmouseout='clearTimeout(timeoutID2);timeoutID2=setTimeout(\"popDownYear()\",100)' cellspacing=0>"	+ sHTML	+ "</table>"

			yearConstructed	= true
		}
	}

	function popDownYear() {
		clearInterval(intervalID1)
		clearTimeout(timeoutID1)
		clearInterval(intervalID2)
		clearTimeout(timeoutID2)
		crossYearObj.visibility= "hidden"
	}

	function popUpYear() {
		var	leftOffset

		constructYear()
		crossYearObj.visibility	= (dom||ie)? "visible" : "show"
		leftOffset = parseInt(crossobj.left) + document.getElementById("spanYear").offsetLeft
		if (ie)
		{
			leftOffset += 6
		}
		crossYearObj.left =	leftOffset
		crossYearObj.top = parseInt(crossobj.top) +	26
	}

	/*** calendar ***/
   function WeekNbr(n) {
      // Algorithm used:
      // From Klaus Tondering's Calendar document (The Authority/Guru)
      // hhtp://www.tondering.dk/claus/calendar.html
      // a = (14-month) / 12
      // y = year + 4800 - a
      // m = month + 12a - 3
      // J = day + (153m + 2) / 5 + 365y + y / 4 - y / 100 + y / 400 - 32045
      // d4 = (J + 31741 - (J mod 7)) mod 146097 mod 36524 mod 1461
      // L = d4 / 1460
      // d1 = ((d4 - L) mod 365) + L
      // WeekNumber = d1 / 7 + 1
 
      year = n.getFullYear();
      month = n.getMonth() + 1;
      if (startAt == 0) {
         day = n.getDate() + 1;
      }
      else {
         day = n.getDate();
      }
 
      a = Math.floor((14-month) / 12);
      y = year + 4800 - a;
      m = month + 12 * a - 3;
      b = Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400);
      J = day + Math.floor((153 * m + 2) / 5) + 365 * y + b - 32045;
      d4 = (((J + 31741 - (J % 7)) % 146097) % 36524) % 1461;
      L = Math.floor(d4 / 1460);
      d1 = ((d4 - L) % 365) + L;
      week = Math.floor(d1/7) + 1;
 
      return week;
   }

	function constructCalendar () {
		var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31)

		var dateMessage
		var	startDate =	new	Date (yearSelected,monthSelected,1)
		var endDate

		if (monthSelected==1)
		{
			endDate	= new Date (yearSelected,monthSelected+1,1);
			endDate	= new Date (endDate	- (24*60*60*1000));
			numDaysInMonth = endDate.getDate()
		}
		else
		{
			numDaysInMonth = aNumDays[monthSelected];
		}

		datePointer	= 0
		dayPointer = startDate.getDay() - startAt
		
		if (dayPointer<0)
		{
			dayPointer = 6
		}

		sHTML =	"<table	 border=0 style='font-family:verdana;font-size:10px;'><tr>"

		if (showWeekNumber==1)
		{
			sHTML += "<td width=27><b>" + weekString + "</b></td><td width=1 rowspan=7 bgcolor='#d0d0d0' style='padding:0px'><img src='"+imgDir+"divider.png' width=1></td>"
		}

		for	(i=0; i<7; i++)	{
			sHTML += "<td width='27' align='right' style='font-size:11px;'><B>"+ dayName[i]+"</B></td>"
		}
		sHTML +="</tr><tr>"
		
		if (showWeekNumber==1)
		{
			sHTML += "<td align=right style='font-size:11px;'>" + WeekNbr(startDate) + "&nbsp;</td>"
		}

		for	( var i=1; i<=dayPointer;i++ )
		{
			sHTML += "<td>&nbsp;</td>"
		}
	
		for	( datePointer=1; datePointer<=numDaysInMonth; datePointer++ )
		{
			dayPointer++;
			sHTML += "<td align=right>"
			sStyle=styleAnchor
			if ((datePointer==odateSelected) &&	(monthSelected==omonthSelected)	&& (yearSelected==oyearSelected))
			{ sStyle+=styleLightBorder }

			sHint = ""
			for (k=0;k<HolidaysCounter;k++)
			{
				if ((parseInt(Holidays[k].d)==datePointer)&&(parseInt(Holidays[k].m)==(monthSelected+1)))
				{
					if ((parseInt(Holidays[k].y)==0)||((parseInt(Holidays[k].y)==yearSelected)&&(parseInt(Holidays[k].y)!=0)))
					{
						sStyle+="background-color:#FFDDDD;"
						sHint+=sHint==""?Holidays[k].desc:"\n"+Holidays[k].desc
					}
				}
			}

			var regexp= /\"/g
			sHint=sHint.replace(regexp,"&quot;")

			dateMessage = "onmousemove='window.status=\""+selectDateMessage.replace("[date]",constructDate(datePointer,monthSelected,yearSelected))+"\"' onmouseout='window.status=\"\"' "

			if ((datePointer==dateNow)&&(monthSelected==monthNow)&&(yearSelected==yearNow))
			{ sHTML += "<b><a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' href='javascript:dateSelected="+datePointer+";closeCalendar();'><font color=#ff0000>&nbsp;" + datePointer + "</font>&nbsp;</a></b>"}
			else if	(dayPointer % 7 == (startAt * -1)+1)
			{ sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' href='javascript:dateSelected="+datePointer + ";closeCalendar();'>&nbsp;<font color=#909090>" + datePointer + "</font>&nbsp;</a>" }
			else
			{ sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' href='javascript:dateSelected="+datePointer + ";closeCalendar();'>&nbsp;" + datePointer + "&nbsp;</a>" }

			sHTML += ""
			if ((dayPointer+startAt) % 7 == startAt) { 
				sHTML += "</tr><tr>" 
				if ((showWeekNumber==1)&&(datePointer<numDaysInMonth))
				{
					sHTML += "<td align=right>" + (WeekNbr(new Date(yearSelected,monthSelected,datePointer+1))) + "&nbsp;</td>"
				}
			}
		}

		document.getElementById("date_content").innerHTML   = sHTML
		document.getElementById("spanMonth").innerHTML = "&nbsp;" +	monthName[monthSelected] + "&nbsp;<IMG id='changeMonth' SRC='"+imgDir+"drop1.png' WIDTH='12' HEIGHT='10' BORDER=0>"
		document.getElementById("spanYear").innerHTML =	"&nbsp;" + yearSelected	+ "&nbsp;<IMG id='changeYear' SRC='"+imgDir+"drop1.png' WIDTH='12' HEIGHT='10' BORDER=0>"
	}

	function popUpCalendar(ctl,	ctl2, format, ctl3) {
		var	leftpos=0
		var	toppos=0

		if (bPageLoaded)
		{
			if ( crossobj.visibility ==	"hidden" ) {
				ctlToPlaceValue	= ctl2
				dateFormat=format;

				ctlToPlaceValue3 = ctl3;

				formatChar = " "
				aFormat	= dateFormat.split(formatChar)
				if (aFormat.length<3)
				{
					formatChar = "/"
					aFormat	= dateFormat.split(formatChar)
					if (aFormat.length<3)
					{
						formatChar = "."
						aFormat	= dateFormat.split(formatChar)
						if (aFormat.length<3)
						{
							formatChar = "-"
							aFormat	= dateFormat.split(formatChar)
							if (aFormat.length<3)
							{
								// invalid date	format
								formatChar=""
							}
						}
					}
				}

				tokensChanged =	0
				if ( formatChar	!= "" )
				{
					// use user's date
					aData =	ctl2.value.split(formatChar)

					for	(i=0;i<3;i++)
					{
						if ((aFormat[i]=="d") || (aFormat[i]=="dd"))
						{
							dateSelected = parseInt(aData[i], 10)
							tokensChanged ++
						}
						else if	((aFormat[i]=="m") || (aFormat[i]=="mm"))
						{
							monthSelected =	parseInt(aData[i], 10) - 1
							tokensChanged ++
						}
						else if	(aFormat[i]=="yyyy")
						{
							yearSelected = parseInt(aData[i], 10)
							tokensChanged ++
						}
						else if	(aFormat[i]=="mmm")
						{
							for	(j=0; j<12;	j++)
							{
								if (aData[i]==monthName[j])
								{
									monthSelected=j
									tokensChanged ++
								}
							}
						}
					}
				}

				if ((tokensChanged!=3)||isNaN(dateSelected)||isNaN(monthSelected)||isNaN(yearSelected))
				{
					dateSelected = dateNow
					monthSelected =	monthNow
					yearSelected = yearNow
				}

				odateSelected=dateSelected
				omonthSelected=monthSelected
				oyearSelected=yearSelected

				aTag = ctl
				do {
					aTag = aTag.offsetParent;
					leftpos	+= aTag.offsetLeft;
					toppos += aTag.offsetTop;
				} while(aTag.tagName!="BODY");

				crossobj.left =	fixedX==-1 ? ctl.offsetLeft	+ leftpos :	fixedX
				crossobj.top = fixedY==-1 ?	ctl.offsetTop +	toppos + ctl.offsetHeight +	2 :	fixedY
				constructCalendar (1, monthSelected, yearSelected);
				crossobj.visibility=(dom||ie)? "visible" : "show"

				hideElement( 'SELECT', document.getElementById("calendar") );
				hideElement( 'APPLET', document.getElementById("calendar") );			

				bShow = true;
			}
			else
			{
				hideCalendar()
				if (ctlNow!=ctl) {popUpCalendar(ctl, ctl2, format, ctl3)}
			}
			ctlNow = ctl
		}
	}

	document.onkeypress = function hidecal1 () { 
		if (event.keyCode==27) 
		{
			hideCalendar()
		}
	}
	document.onclick = function hidecal2 () { 		
		if (!bShow)
		{
			hideCalendar()
		}
		bShow = false
	}

	if(ie)
	{
		init()
	}
	else
	{
		window.onload=init
	}


function updhidden(val, dateFormat) {//updhidden
 
	var	aFormat	= new Array()
	var	aFormat_date = new Array()
	var	aFormat_time = new Array()
	var	aData = new Array()
	var	aData_date = new Array()
	var	aData_time = new Array()
	var	arr = new Array()
	var	arr_Data = new Array()
	var formatChar = " "
		

				aFormat	= dateFormat.split(formatChar)
				aData =	val.split(formatChar)


                //"Y m d H:i:s", "d m Y H:i:s"

                if (aFormat.length==4) {//if 
                 for (i=0;i<3;i++) {//for i
				  aFormat_date[i] = aFormat[i]
                  aData_date[i] = aData[i] 
                 }//for i 

				 aFormat_time = aFormat[3].split(":")
				 aData_time = aData[3].split(":")
                }//if 
                

                //"Y m d", "d m Y"

				else if (aFormat.length==3) {//else if 
 			     aFormat_date = aFormat
 			     aData_date = aData
                }//else if



                //"Y-m-d H:i:s", "d-m-Y H:i:s", "Y-m-d", "d-m-Y"

				else if (aFormat.length<3) {//else if 

                    other = true
					formatChar = "/"
					aFormat = dateFormat.split(formatChar)
					aData = val.split(formatChar)
					if (aFormat.length<3)
					{//if 2
						formatChar = "."
						aFormat = dateFormat.split(formatChar)
					    aData = val.split(formatChar)
						if (aFormat.length<3)
						{//if 3
							formatChar = "-"
							aFormat = dateFormat.split(formatChar)
					        aData = val.split(formatChar)

							if (aFormat.length<3) // invalid date format
								formatChar=""
							else {//else
							   other = false
                               arr = aFormat[2].split(" ")
                               arr_Data = aData[2].split(" ")

                               if(arr.length<2) //"Y-m-d", "d-m-Y"
								 aFormat_date = aFormat

							   else {//"Y-m-d H:i:s", "d-m-Y H:i:s"
							    aFormat_date = aFormat
							    aFormat_date[2] = arr[0]
							    aData_date = aData
							    aData_date[2] = arr_Data[0]
							    aFormat_time = arr[1].split(":") 
							    aData_time = arr_Data[1].split(":") 
							   }//else  	    

							}//else

						}//if 3
					}//if 2

                    
					if(!other) {//if
                     aFormat_date = aFormat
                     aData_date = aData
                    }//if
					 
				}//else if





				if (formatChar	!= "") {//if 1

  				    var dt = new Date();


					for	(i=0;i<3;i++) {//for i

                      switch (aFormat_date[i]) {//switch date
					  
						case "d":
						case "j":
						   day_val = aData_date[i]
                        break;


						case "m":
						case "n":
                            mth_val = aData_date[i]
                        break;


                        case "M":
						     for(k=0;k<monthName.length;k++) {//for k
							   if(monthName[k].toLowerCase()==aData_date[i].toLowerCase()) {//if
                                mth_val = k+1
                                break;
							   }//if
							 }//for k
                        break;


						case "F":
						     for(k=0;k<monthNameFull.length;k++) {//for k
							   if(monthNameFull[k].toLowerCase()==aData_date[i].toLowerCase()) {//if
                                mth_val = k+1
                                break;
							   }//if
							 }//for k						      
                        break;


						case "Y":
						case "y":
						     if(aData_date[i].length==2) yr_val = (dt.getYear()+"").substring(0,2) + aData_date[i]
                             else yr_val = aData_date[i]
                        break; 

                      }//switch date


  
                     if(aFormat_time.length>0)
                      switch(aFormat_time[i]) {//switch time

                        case "H":
						   hr_val = aData_time[i]
                        break; 

                        case "i":
						   min_val = aData_time[i]
                        break; 

                        case "s":
						   sec_val = aData_time[i]
                        break; 
					  
                      }//switch time

                       

					}//for i


                 if(aFormat_time.length>0) result = yr_val+"-"+mth_val+"-"+day_val+" "+hr_val+":"+min_val+":"+sec_val
                 else result = yr_val+"-"+mth_val+"-"+day_val+" "+padZero(dt.getHours())+':'+padZero(dt.getMinutes())+':'+padZero(dt.getSeconds())


                 return result
				}//if 1

   return ""
}//updhidden

function setProcessDateOnClose() {
	processDateOnClose = 1; 
}